//
//  DMATTManager.h
//  DualMediationSDK
//
//  ATT权限管理器 - 独立模块
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

// 前向声明
@protocol DMAdDelegate;

/**
 * ATT权限管理器
 * 
 * 核心职责：
 * 1. 处理ATT（App Tracking Transparency）授权
 * 2. 管理ATT权限状态
 * 3. 提供ATT权限请求接口
 * 4. ATT状态持久化存储
 * 5. 详细的delegate回调和日志输出
 * 
 * 特点：
 * - 独立的ATT权限管理
 * - 支持iOS 14及以上版本的ATT框架
 * - 完整的delegate回调机制
 * - 线程安全的实现
 */
@interface DMATTManager : NSObject

#pragma mark - Singleton

/**
 * 获取单例实例
 */
+ (instancetype)sharedManager;

#pragma mark - Delegate

/**
 * ATT事件代理
 */
@property (nonatomic, assign, nullable) id<DMAdDelegate> delegate;

#pragma mark - Core API

/**
 * 请求ATT权限
 * 
 * 此方法会：
 * 1. 检查当前ATT权限状态
 * 2. 如果未确定，则向用户请求权限
 * 3. 保存权限状态到本地存储
 * 4. 通过delegate回调权限结果
 * 
 * @param completion 完成回调，success表示是否成功处理，error包含错误信息
 * 
 * @note 此方法是线程安全的，可以多次调用
 * @note 在iOS 14以下版本会直接返回成功（不需要ATT权限）
 * @note 所有ATT操作都会通过delegate进行详细回调
 */
- (void)requestATTPermissionWithCompletion:(void(^)(BOOL success, NSError * _Nullable error))completion;

/**
 * 检查ATT权限是否可用
 * @return YES表示当前系统支持ATT权限，NO表示不支持（iOS 14以下）
 */
- (BOOL)isATTAvailable;

/**
 * 获取当前ATT权限状态
 * @return ATT权限状态值
 */
- (NSInteger)getCurrentATTStatus;

#pragma mark - Status Properties

/**
 * 检查ATT权限是否已被授权
 */
@property (nonatomic, readonly) BOOL isATTAuthorized;

/**
 * 检查ATT权限是否已被拒绝
 */
@property (nonatomic, readonly) BOOL isATTDenied;

/**
 * 检查ATT权限是否未确定
 */
@property (nonatomic, readonly) BOOL isATTNotDetermined;

@end

NS_ASSUME_NONNULL_END